nohup
是 Linux/Unix 系统中用于让命令在后台持续运行的工具,即使用户关闭终端或注销也不会中断进程
。它的核心功能是忽略挂起信号(SIGHUP),确保任务稳定执行。
🧠 什么是 nohup?
- 全称:no hang up(不挂断)
- 作用:防止进程因终端关闭而被系统终止
- 原理:忽略 SIGHUP 信号,让进程在后台继续运行
🛠 nohup 命令语法
nohup command [args] > output.log 2>&1 &
command
:要执行的命令或脚本>
:重定向标准输出2>&1
:将标准错误输出重定向到标准输出&
:在后台运行命令
📌 常见用法示例
1. 基本后台运行
nohup ./script.sh &
输出默认写入 nohup.out
文件。
2. 自定义输出文件
nohup ./script.sh > run.log 2>&1 &
将标准输出和错误输出都写入 run.log
。
3. 忽略所有输出
nohup ./script.sh > /dev/null 2>&1 &
适用于不需要日志的场景。
🔍 nohup 的输出行为
- 默认输出文件为当前目录下的
nohup.out
- 如果当前目录不可写,则输出到
$HOME/nohup.out
- 可使用
>
和>>
重定向输出到其他文件
🧩 nohup 与后台任务管理
查看进程:
ps -ef | grep script.sh
终止进程:
kill -9 <PID>
查看任务列表:
jobs
恢复前台任务:
fg %1
⚠️ 注意事项
nohup
只能忽略 SIGHUP,不能防止 SIGTERM 或 SIGKILL- 建议配合
&
使用以实现真正的后台运行 - 对于复杂任务,推荐使用
tmux
、screen
或systemd
✅ 适用场景
- 远程服务器运行长时间任务(如模型训练、数据备份)
- 启动后台服务(如 Web 服务、定时任务)
- 防止 SSH 断开导致任务中断